PRELOADER

当前文章 : 《Bug Bounty 通过DS_STORE文件进行文件泄露》

12/2/2019 —— 

Bug Bounty 通过 DS_STORE文件进行文件泄露

原文链接:https://omespino.com/write-up-file-disclosure-via-ds_store-file-macos/

大家好,这是另一篇Facebook Whitehat报告写的(Facebook将该报告标记为N / A,但是其他一些程序接受这个错误作为有效的错误奖励,根据前Twitter。所以这可能在某些情况下有用),所以我写下个人的渗透测试报告,希望能够帮助到你们:

标题:目录列表通过.DS_Store文件(macOS)公开

产品/ URL:https://live.oculus.com/

描述和影响

Apple Macintosh OS X / macOS .DS_Store目录列表泄露漏洞

在Apple macOS操作系统中,.DS_Store是一个存储其包含文件夹的自定义属性的文件,例如图标的位置或背景图像的选择。

但也列出了由MACOS自动创建的作为隐藏文件的目录的全部文件。

远程攻击者可以通过像以下形式:攻击主机的Web服务提交URL来读取Web目录内容信息:

http://www.example.com/target_directory/.DS_store

此信息可能为攻击者提供敏感信息,包括系统配置,已安装的应用程序等。

如果被正确利用,此信息可能会使攻击者进一步损害主机的安全性。

但.DS_Store文件如何在Web服务器上运行?这可以通过以下几种方式实现:

用户通过FTP将整个文件夹复制到Web服务器。在这种情况下,该文件夹中包含的.DS_Store文件(或子文件夹中包含的多个.DS_Store文件)

将被复制到Web服务器。(请注意,默认情况下,某些FTP客户端不会复制.DS_Store文件。)

用户通过选择文件夹中的所有文件,将文件夹的全部内容通过FTP复制到Web服务器。在正常使用中,.DS_Store文件不会被复制,

但是,如果在用户的FTP客户端中显示不可见的文件,用户只需选择文件夹中的所有文件并将它们复制到Web服务器目录,

.DS_Store文件 - 和任何其他不可见的文件 - 将被复制到服务器。

复现过程

  1. OS:macOS
  2. 您需要安装python2.7,pip for python2.7,ds_store和tqdm pip模块:
  3. brew install python && sudo pip install ds_store && sudo pip install tqdm
  4. 仅用于.DS_Store解析以制作内容文件“人类可读”
  5. 导航到https://live.oculus.com/assets/.DS_Store和“.DS_Store”文件,自动下载。
  6. 保存代码,这是一个小的“.DS_Store”文件解析器,在同一个“.DS_Store”文件目录中为“dsstore.py”:

*注意:这个脚本是从互联网的某些部分借来的,但我找不到来源了,如果有人知道作者,请让我知道给他/她写下参考链接。

1. #!/usr/bin/env python
1. # Begin Small .DS_Store Parser
1. # -*- encoding: utf-8 -*-
1. from ds_store import DSStore
1. from tqdm import tqdm
1. import argparse
1. parser = argparse.ArgumentParser()
1. parser.add_argument("-p", "--path", help="Path to the DS_Store file", required=True)
1. parser.add_argument("-t", "--type", help="Type : Iloc, bwsp, lsvp, lsvP, icvp", default='Iloc')
1. args = parser.parse_args()
1. dsstore = DSStore.open(args.path, 'r+')
1. for data in tqdm(dsstore):
1. data = str(data)
1. entry = data.translate(None, "<>")
1. entry = entry.split(' ')
1. if(entry[1] == args.type):
1. print(entry[0])
1. # Ends Small .DS_Store Parser

运行脚本得到

1. localhost:~ds_store_py $ python dsstore.py -p .DS_Store 
1. 0%| 
1. fonts 
1. images 
1. logos 
1. nux_bg_web.mp4 
1. oculus-health.pdf

然后列出文件,让我们看看其他目录会发生什么,例如“images”,导航到https://live.oculus.com/assets/images/.DS_Store和“.DS_Store” “文件,再次自动下载。

从图像重新运行.DS_Store的脚本并查看输出

1. localhost:~ds_store_py $ python dsstore.py -p .DS_Store 
1. 0%| 
1. 24_sprite.png 
1. 24_sprite2x.png 
1. _temp-cesbg.jpg 
1. _temp-ceslogo.png 
1. _temp-e3bg.jpg 
1. _temp-e3logo.png 
1. bg-event-generic.jpg 
1. bg-experiences.jpg 
1. bg-home.jpg 
1. bg-search.jpg 
1. bg- search2.jpg 
1. black-dot@2x.png 
1. black-pin1@2x.png 
1. black-pin2@2x.png 
1. black-pin3@2x.png 
1. black-pin4@2x.png 
1. black-pin@2x.png 
1. blue-dot @ 2x .png 
1. blue-pin1@2x.png 
1. blue-pin2@2x.png 
1. blue-pin3@2x.png 
1. blue-pin4@2x.png 
1. blue-pin@2x.png 
1. confirmation-bg.jpg 
1. event_e3_feature.jpg
1. event_tour_feature.jpg 
1. facebook_og.jpg 
1. facebook_share.jpg 
1. favicon.png 
1. new-reality-1.jpg 
1. new-reality-3.jpg 
1. oculus-ready.png 
1. twitter_card.jpg

然后在浏览器中确认列出的任何文件的可访问性,例如“_temp-e3logo.png”,通过任何浏览器都可以访问https://live.oculus.com/assets/images/_temp-e3logo.png并查看该文件。

在整个目录“Three”中重复,如果您可以访问任何“.DS_Store”,则可以看到目录列表

建立在https://live.oculus.com/上的“.DS_Store”文件:

1. https://live.oculus.com/assets/.DS_Store 
1. https://live.oculus.com/assets/images/.DS_Store 
1. https://live.oculus.com/assets/logos/.DS_Store

攻击者如何获取文件?

使用简单的google / bing dork,例如“site:live.oculus.com filetype(.DS_Store OR DS_Store)”,

或者可以在资源或图像目录上手动测试,在网址末尾添加.DS_Store:“https ://live.oculus.com/assets/“+”。DS_Store“,

因为当您在macOS中压缩文件夹并将文件夹上传到服务器时,上传DS_Store文件是一个常见错误,DS_Store文件本身就存在安全问题,

我认为安全问题是您在Web应用程序中发布了那种让攻击者列出整个目录的文件。

这次是在无害的文件夹中,但想想如果你不小心将.DS_Store上传到服务器中错误的公共文件夹中的影响。

无论如何,您应该删除任何Web应用程序公共服务器上的任何.DS_Store以防止此行为。

解决方案/修复:

清除Internet上发布的任何应用程序服务器上的任何.DS_Store文件。

时间表:

  1. 2017年6月3日:初步报告

  2. 2017年6月6日:安全团队成员Kurt寻求帮助以理解并重现该错误

  3. 06 Jun 2017:我的回复包含更多详细信息。

  4. 2017年6月7日:安全团队询问“攻击者”如何获取对上述文件的访问权限(.DS_Store)

  5. 2017年6月8日:报告分类2017年

  6. 6月7日:Bug确认并且Neal说修复正在进行中

  7. 2017年6月12日:Vic告诉我该bug已被缓解。

  8. 2017年6月12日:我回复确认该错误已于2017年6月

  9. 21日修补:报告标记为“不适用”,下一个决议“委员会开会分析问题,我们认为它没有资格获得赏金,因为没有敏感数据曝光“